package com.mjf.scala.chapter06

/**
 * 特质叠加 解决特质冲突（钻石问题）
 *
 * -特质叠加的顺序
 * 第一步：列出第一个混入特质的继承关系，作为临时叠加的顺序
 * DBOperation-->Operation
 *
 * 第二步：列出第二个混入特质的继承关系,并且该顺序放到临时叠加顺序的前面，已经出现的特质不在出现
 * HDFSOperation-->DBOperation-->Operation
 *
 * 第三步：将子类放到临时叠加顺序的第一个
 * MyOperation-->HDFSOperation-->DBOperation-->Operation
 *
 *
 * 注意：这个时候super不是调用父类中的方法了，而是调用特质叠加顺序上下一个节点的方法
 */
object Scala20_TestTrait {
  def main(args: Array[String]): Unit = {

    val op: MyOperation = new MyOperation()

    println(op.describe())

  }
}

trait Operation {
  def describe(): String = "插入数据"
}

trait DBOperation extends Operation {
  override def describe(): String = "向MySQL中插入数据" + super.describe()
}

trait HDFSOperation extends Operation {
  override def describe(): String = "向HDFS中插入数据" + super.describe()
}

class MyOperation extends DBOperation with HDFSOperation {
  override def describe(): String = "要执行的操作是：" + super.describe()
}
